//
// Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011
//
// Copyright: See COPYING file that comes with this distribution
//

#ifndef FASYS_LIBS_API_MESSAGE_HPP
#define FASYS_LIBS_API_MESSAGE_HPP

#include "types.hpp"

namespace fasys{ namespace api{

struct message_base
{
  /** Порядок в канале */
  order_t       order;
  /** Время создания */
  time_t        create_time;
  /** Время жизния в канале */
  time_t        lifetime;
  /** Количество сообщений в канале (0-удаляет все сообщения, можно использовать в качестве ретранслятора) */
  size_t        limit;

  message_base()
    : order(0)
    , create_time(0)
    , lifetime(0)
    , limit(0)
  {}
};


/** Данные необходимые для публикации сообщения */
struct message_publish
  : message_base
{
  /** имя канала */
  std::string   channel;
  /** контент сообщения. */
  data_t        content;

  message_publish()
    : message_base() {}
};

/** Уведомление о поступлении сообщения */
struct message_notify
  : message_publish
{
  /**Идентификатрор сообщения. Уникальный для канала. */
  message_id_t  message_id;
  /**Идентификатрор канала. Уникальный для клиента. */
  channel_id_t  channel_id;
  /**Количество сообщений в канале на момент публикации */
  size_t count;
  /** Время на сервере, когда сообщение умрет */
  time_t        death_time;
  /** Интервал времени до смерти сообщения */
  time_t        death_timespan;

  message_notify()
    : message_publish()
    , message_id(0)
    , channel_id(0)
    , count(0)
    , death_time(0)
    , death_timespan(0)
  {}
};

}}

#endif

